import {
	defineStore
} from "pinia";

import {
	computed,
	onMounted,
	onUnmounted,
	reactive,
	ref,
	nextTick,
	toRaw,
	watch,
} from "vue";

import * as util from '@/amtf/utils'
// import { uid } from 'quasar'
// import { date } from 'quasar'
import {
	onReachBottom,
	onPullDownRefresh
} from '@dcloudio/uni-app'
import useshezhistore from "@/stores/shezhi-store"

import useApi from "@/api/增查api.js"
import use单项集 from "@/hooks/单项集hook"

export default defineStore("订单",
	(cfg = {}) => {
		const api = useApi({ key: "订单" })
		const { 清缓存 } = api
		const a = reactive({
			是调试: false,
			// 是调试: true,
		})
		const shezhi = useshezhistore()
		const { a: 设置 } = shezhi

		const id = Date.now()
		const 单项模板 = {
			id,
			客户: 设置.客户组[0] || "客户a",
			开台时间: Date.now(),
			状态: "进行中",
			明细: []
		}

		// 查询参数👇
		const req = reactive({
			仅进行中: true,
		})
		if (cfg.req) Object.assign(req, cfg.req)

		// let 源单项组 = []

		const 单项组 = reactive([
			// util.深拷贝(单项模板),
		])

		// const 单项集 = reactive({})
		const { 单项集 } = use单项集({ 单项组, 初始对象: { 编辑: false } })

		async function 初始化() {
			const res = await api.查(req);
			// console.log('查多个 res: ', res);
			// 源单项组 = res;
			util.数组重予(单项组, res);
			return res
		}
		初始化();

		onPullDownRefresh(async () => {
			console.log('refresh');
			uni.showToast({
				title: "刷新中……",
				icon: "loading"
			});
			let res = await 初始化();
			uni.stopPullDownRefresh();
		});

		const 显单项组 = computed(() => {
			console.log('cfg.过滤: ', cfg.过滤);
			let res = 仅进行中.value ? '进行中' : '全部'
			return res
		})

		// async function 查多个() {
		// 	try {
		// 		const res = await uni.getStorage({ key });
		// 		if (res.data) {
		// 			源单项组 = res.data;
		// 			let data = 源单项组;

		// 			if (req.仅进行中) {
		// 				data = util.数组过滤(data, "状态", "进行中");
		// 			}
		// 			util.数组重予(单项组, data);
		// 			let res2 = util.组转对象(单项组, { 编辑: false });
		// 			util.对象重予(单项集, res2);

		// 			console.log('单项组: ', 单项组);
		// 			return res.data; // 返回数据
		// 		}
		// 		return null; // 没有数据时返回 null
		// 	} catch (error) {
		// 		console.log('查多个 error: ', error);
		// 		// uni.showToast({
		// 		// 	title: error,
		// 		// 	duration:5000,
		// 		// 	icon: "none"
		// 		// });
		// 		// throw error;
		// 		return error
		// 	}
		// }

		// function 予单项集() {
		// 	for (let s of 单项组) {
		// 		单项集[s.id] = { 编辑: false };
		// 	}
		// }

		function 予编辑(单项) {
			单项集[单项.id].编辑 = true
		}

		async function 改(单项) {
			// 改库(单项)
			// let res = util.查元素(源单项组, 单项.id)
			// // console.log('库中源 res: ', res);
			// util.对象重予(res, util.深拷贝(单项))
			// console.log('库中源 对象重予后 res: ', res);
			const res2 = await api.改(单项)
			return res2
		}

		// function 改库(单项) {
		// 	console.log('改库: 源单项组', 源单项组);
		// 	let res = util.查元素(源单项组, 单项.id)
		// 	console.log('库中源 res: ', res);
		// 	util.对象重予(res, util.深拷贝(单项))
		// 	console.log('库中源 对象重予后 res: ', res);
		// 	存库()
		// }

		// function 存库() {
		// 	console.log('存库: 源单项组', 源单项组);
		// 	const res = uni.setStorage({
		// 		key,
		// 		data: 源单项组
		// 	})
		// 	console.log('存库 res: ', res);
		// }

		function 确定(单项) {
			单项集[单项.id].编辑 = false
		}

		function 删(单项) {
			util.删除元素(单项组, 单项)
			util.删除元素(源单项组, 单项.id)
			存库()
		}

		function 取编辑(单项) {
			const res = 单项集[单项.id].编辑
			return res
		}

		const setInputRef = (el, 单项) => {
			if (el) {
				单项集[单项.id].inputref = el;
			}
		};

		async function 增() {
			const id = util.成id()
			const 单项 = util.深拷贝(单项模板)
			单项.id = id

			// const id = date.formatDate(timeStamp, 'YYYY-MM-DDTHH:mm:ss.SSS')
			单项集[id] = { 编辑: true };

			单项组.unshift(单项)
			// 增库(单项)
			// console.log('源单项组: ', 源单项组);
			// 源单项组.unshift(util.深拷贝(单项))
			api.增(单项)
			await nextTick();
			// console.log(`单项集[id].inputref 👉`, 单项集[id].inputref)
			const inputref = 单项集[id].inputref;
			// console.log('inputref: ', inputref);
			if (inputref) {
				inputref.focusInput(); // 调用子组件暴露的方法
			}
		}

		// function 增库(单项) {
		// 	源单项组.unshift(util.深拷贝(单项))
		// 	存库()
		// }

		watch(req, (newValue, oldValue) => {
			初始化();
		})

		// watch(单项组, () => {
		// 	// util.组转对象(单项组, { 编辑: false })
		// 	// uni.setStorage({
		// 	// 	key,
		// 	// 	data: 单项组
		// 	// })
		// })

		return {
			a,
			req,
			确定,
			予编辑,
			取编辑,
			清缓存,
			删,
			改,
			setInputRef,
			单项组,
			单项集,
			增
		};

	}

);